perm filename CL.FAI[TMP,LCS] blob sn#496911 filedate 1980-02-12 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	  THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT   AND CLIPS*****
C00015 ENDMK
CāŠ—;
;  THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT   AND CLIPS*****
	TITLE CONV 
	INTERNAL GET,NVECT
	EXTERNAL PUTEXT,EXTOUT,FINEXT
	CH3←15	; SGZ=SEGMENT NUM., SGZ+1=SIZE FACTOR (FOR DISPLACEMENT)

IARRAY:	BLOCK =13500  ;	common/IARRAY/IARRAY(13500) /SGZ/ISEG,SZ,SEGSZ
SGZ:	BLOCK 3
N:	0
ZSHIFT:	0
XSHIFT:	0		;THESE FOR VERSATEC ROTATION
WSHIFT:	=178	;PAPER PRINTS "SIDEWAYS".  THIS CENTERS STANDARD STAFF.
YSHIFT:	0    
I:	0
J:	0
K:	0
QBOT:	0    	;BOTTOM OF CLIPPED AREA  (200) or (-200)
QTOP:	0	;TOP OF CLIPPED AREA (600)
SEGSZ:	=800	;DOES 4 INCH SEGMENT FOR NOW
TOPX:	=600

GET:	0
BEG:	OUTSTR[ASCIZ/FILE NAME (DEFAULT=PLT)  /]
	INCHWL 1
	CAIN	1,15		; LOOK FOR CR.
	JRST 	DFAULT
	SETZM DIR		; THE FILE NAME WILL BE HERE.
	SKIPA 2,[POINT 6,DIR]
GOT:	INCHWL	1
	CAIGE	1,60		; CHECKS FOR GOOD CHARS.
	JRST	DONE
	SUBI	1,40
	IDPB	1,2
	JRST	GOT

DFAULT:	MOVE 1,[SIXBIT/PLT/]
	MOVEM 1,DIR
DONE:	INIT CH3,17
	SIXBIT/DSK/
	0
	0
	MOVE 0,[SIXBIT/PLT/]
	MOVEM 0,DIR+1
	SETZM DIR+2
	SETZM DIR+3
	LOOKUP CH3,DIR
	HALT 		;DID NOT FIND FILE
	SETZM DIR+1

;	MOVE 1,SGZ+2	;GET BIG SHIFT (TEMPORARY FEATURE ?)
;	SKIPE 1
;	SOJ 1,
;	IMULI 1,=1700	;SHIFT=(ISHIFT-1)*1700
	
	MOVE SEGSZ
	SKIPN 2,SGZ+2	;IS THERE A SEGMENT SIZE?
	JRST SGX	;NO
	FMPRI 2,(200.0)
	KIFIX 0,2		;CHANGE INCHES TO STEPS (200/INCH)
SGX:	MOVEM SEGX#
	SKIPE 2,SGZ+1	;GET SIZE FACT.
	FSBRI 2,(1.0)	;YSHIFT=(SZFAC-1)*850+178
	FMPR 2,[850.0]
	KIFIX 2,2

	SKIPE 1,SGZ	;GET SEGMENT NUMBER  SEG 0 IS SAME AS SEG 1.
	SOJ 1,		;SEG=600-(SEG-1)*800
	IMUL 1,SEGX	;SEGSZ FOR NOW=800
	SUB 1,WSHIFT
	SUB 1,2		;ADD IN FROM ABOVE
	MOVNM 1,YSHIFT

TTOP:	MOVE TOPX
	MOVEM QTOP	;TOP=600, BOT=-200 FOR NOW
	SUB SEGX	;SUBTRACT SEGMENT SIZE (4 INCHES FOR NOW)
	MOVEM QBOT

	SETOM INVI#	; FOT 2 INIVIS VECTS IN A ROW (EOF)
	SETZM N		;FOR CLIPPER
	MOVE ZSHIFT
	MOVEM XSHIFT	;FOR RE-STARTS
	SETZ 10,	;FLIP-FLOP FOR CONSECUTIVE INVIS. VECTS.
	SETO 15,	;INITIALIZE XSHIFT (REALLY YSHIFT BECAUSE ROTATED.)
	SETOM PREV	;INITIALIZE FLAG FOR SKIPPING UNNEEDED INVISIBILES.
	SETZM IARRAY	;ZERO 1ST WORD.
	MOVEI 11,1 	;MAIN ARRAY COUNTER(FILL IN 1ST 2 WORDS AT END)
INP:	HRRZI 0,M
	SUBI 0,1
	MOVEM 0,COM
	MOVNI 0,=128
	HRLM 0,COM
	INPUT CH3,COM
	STATZ CH3,740000
	0
	MOVEI 6,1	;COUNTER 
LUP:	MOVEI 5,M
	ADDI  5,(6)
	MOVE 2,(5)	; UNPAC ROUTINE
	LSHC 2,-10	; 14 BITS, 14 BITS, 8 BITS
	ASH 3,-34
	JUMPE 3,NOVEC	;IF(PEN.EQ.0)GO TO NOVEC    START OF 128 WD SEGMENT.
	MOVE 7,3	;MOVEM 3,K 	KEEP IT FOR 11/40 CONVERSION
	LSHC 2,-16
	ASH 3,-26
	MOVEM 3,J 
	LSHC 2,-16
	ASH 3,-26
	MOVEM 3,I

	MOVEI 12,106	;VISIBLE	PACKS IN 11/40 FORMAT
	CAIN 7,2
	JRST VVV
	JUMPG 7,SHIFT	;IS IT -3??
	AOJLE 15,SHFT1	;AOJ 15,		; YES
;;	JUMPLE 15,MORE 	; SKIP FIRST TIME IT HAPPENS
	MOVE J		; GET SHIFT FOR NEXT ORIGINAL INPUT FILE
SHFT2:	ADDM XSHIFT	; UPDATE SHIFT (FIRST TIME IT'S ZERO)
	JRST MORE
SHFT1:	MOVNI =512	;FIRST TIME SUBTRACT 512 FROM SHIFT
	ADD J
	JRST SHFT2
SHIFT:	CAME 7,PREV#	;ARE THERE 2 3'S IN A ROW?
	JRST SHFT3	;NO
	SKIPGE N      	;IF(N.LT.0)SKIP THIS NEXT.  N CAN BE 0,1,-1
	JRST SHFT3
	SKIPN 10	;DID WE DO THIS ALREADY?
	SOJ 11,		;NO, OMIT LAST ONE BY DECREMENTING COUNTER
	SETO 10,	; =-1 SO WE DON'T DO 2 INVIS. IN A ROW
	JRST MORE	;****** SKIP NEXT IF REPEATING ITSELF.
SHFT3:	MOVEI 12,146	;INVISIBLE
	SKIPA
VVV:	SETZ 10,	;RESET FLIP-FLOP
	MOVEM 7,PREV	;SAVE PEN INFO FOR NEXT TIME AROUND
	MOVE 13,J	;JSA 16,PLOT
	ADD 13,XSHIFT  ;***** X AND Y ARE ROTATED -90 DEG. ON VERSATEC!!!
	MOVN 14,I	;JUMP I		PACKS BITS - 11,11,14
	SUB 14,YSHIFT	;NEEDED Y SHIFT FOR PLOT.SAV (VERSATEC CONV. PROG.)
;; ABOVE 2 CAUSE -90 DEG. ROTATION.	MOVE 13,I	;JSA 16,PLOT
;;	MOVE 14,J	;JUMP I		PACKS BITS - 11,11,14
	MOVEI 16,CLPX	;LOC. OF ARGS. FOR CLIPPER
	JRST CLIP  ;PUSHJ 17,CLIP
VZZ:	SKIPGE N      	;IF(N.LT.0)WAIT TIL NEXT VECTOR FOR CLIPPED POS.
	JRST MORE
VEC1:	DPB 13,[POINT 11,12,10]	;JUMP J
	DPB 14,[POINT 11,12,21]	;JUMP K
	AOJ 11,
	MOVEM 12,IARRAY(11)	;CAMGE 6,M
;XXX NOT NEEDED IF NOVEC TRAP IS OK.	CAMG 6,M
MORE:	AOJA 6,LUP
	MOVE 2,M
	CAIN 2,=127
	JRST INP
	JRST NV
;NOVEC:	MOVE 2,M
;	CAIN 2,=127
;	JRST INP
NOVEC:	AOS INVI
	SKIPG INVI
	JRST MORE
;;	CAIE 7,2	;WAS LAST VECTOR VISIBLE OR NOT?
;;	SOJ 11,		;NO, SO DELETE IT.  (BACKUP ONE WORD.)
;;	SOJ 11,			;PUT A 0 WORD, THEN TOTAL WORD-COUNT LESS 2
;  	MOVEM 11,IARRAY+1	;INTO 2ND WORD. THEN EXIT
NV:	OUTSTR[ASCIZ/WRITING P.PLT
  /]
	JSA 16,PUTEXT
	JUMP [ASCIZ/P    /]
	JUMP [ASCIZ/PLT/]
	JSA 16,EXTOUT
	JUMP M
	JUMP 11
	JSA 16,FINEXT
	EXIT

CLPX:	JUMP 13
	JUMP 14
	JUMP 7

NVECT:	MOVEI 4,146	; NEW VECTOR POINT - FROM CLIP ROUTINE
;;	MOVE 1,@2(16)	;VIS. OR INVIS.?
;;	CAIE 1,2	
;;	MOVEI 4,106	;VIS.
	MOVE 1,@(16)	;GET NEW J
	MOVE 2,@1(16)	;GET NEW K
VEC2:	DPB  1,[POINT 11,4,10]	;JUMP J
	DPB  2,[POINT 11,4,21]	;JUMP K
	AOJ 11,
	MOVEM 4,IARRAY(11)
	JRST VZZ ;POPJ 17,   

COM:	OCT 0,0
BLKNUM:	0

M:	BLOCK =128

DIR:	BLOCK 4


CL:	0
	MOVE 10,@(16)	;X1
	MOVE 11,@1(16)	;X2
	MOVE 15,11
	SUB 15,10
	FLTR 15,15		;R
	MOVE 14,@3(16)	;Y2
	SUB 14,@2(16)	;Y2-Y1
	FLTR 14,14
	FDVR 14,15	;Q=(Y2-Y1)/(X2-X1)
QX:	MOVE 1,10	;W1=X1
	CAMGE 10,@10(16)	;IF(X1.LT.LFT)W1=LFT
	MOVE 1,@10(16)
	CAMLE 10,@11(16)	;IF(X1.GT.RT)W1=RT
	MOVE 1,@11(16)	;W1 IS AC1
W1X:	MOVEM 1,@4(16)
	SUB 1,10	;W1-X1
	FLTR 1,1
	FMPR 1,14	;*Q
	KIFIX 1,1
	ADD 1,@2(16)	;+Y1
	MOVEM 1,@6(16)
Z1X:	MOVE 1,11	;W2=X2
	CAMGE 11,@10(16)
	MOVE 1,@10(16)
	CAMLE 11,@11(16)
	MOVE 1,@11(16)	;W2 IS AC1
	MOVEM 1,@5(16)
W2X:	SUB 1,11	;X2-W2
	FLTR 1,1
	FMPR 1,14	;*Q
	KIFIX 1,1
	ADD 1,@3(16)	;Y2-Q*(X2-W2)
	MOVEM 1,@7(16)	;Z2
Z2X:	JRA 16,12(16)
 
XXX:	0
YYY:	0
LFT:	-=500
RT:	=500
TOP:	=500
BOT:	-=500
CLIP:	JFCL ;MOVE SVPEN	;	IMPLICIT INTEGER (A-Z)
;	CAIE 3		;	DATA A/100/,B/500/,C/300/,D/100/
;	JRST CL1	;1	FORMAT(' TYPE INITIAL X,Y   '$)
;	MOVE SVX	;	2	FORMAT(10I)
;	MOVEM XXX#	;	TYPE 1
;	MOVE J	;	ACCEPT 2,XX,YY
;	MOVEM YYY#	;3	FORMAT(' TYPE NEXT X,Y   '$)
;	JRST XENOUT ;JRST ENOUT	;4	TYPE 3
CL1:	MOVE XXX	;	ACCEPT 2,X2,Y2
	MOVEM XX#	;	XX=XXX
	MOVE 1,YYY	;	YY=YYY
	MOVEM 1,YY#	;	XXX=X2
	MOVE 2,I	;	YYY=Y2
	MOVEM 2,XXX	;	IF(X1.GE.A.AND.X1.LE.C.AND.X2.GE.A.AND.X2.LE.C.AND.
	MOVE 3,J	;1 Y1.GE.D.AND.Y1.LE.B.AND.Y2.GE.D.AND.Y2.LE.B)GO TO 300
	MOVEM 3,YYY	;C GO TO 300 IF ALL POINTS ARE INBOUNDS.
	CAMGE LFT	;NEXT TO FIND IF LINE IS ALL OUT OF BOUNDS
	CAML 2,LFT
	SKIPA
	JRST XENOUT	;BOTH X1 AND X2 ARE TO LEFT OF WINDOW
	CAMLE RT
	CAMG 2,RT
	SKIPA
	JRST XENOUT	;BOTH ARE TO RIGHT OF WINDOW
	CAMGE 1,BOT
	CAML 3,BOT
	SKIPA
	JRST XENOUT	;BOTH Y1 AND Y2 ARE BELOW WINDOW
	CAMLE 1,TOP
	CAMG 3,TOP
	SKIPA
	JRST XENOUT	;BOTH ARE ABOVE WINDOW
	CAML LFT	; NOW SOME PART OF LINE MIGHT BE IN BOUNDS
	CAMLE RT
	JRST CL2
	CAML 2,LFT
	CAMLE 2,RT
	JRST CL2
	CAML 1,BOT
	CAMLE 1,TOP	;AC0=X1, 2=X2, 1=Y1, 3=Y2
	JRST CL2
	CAML 3,BOT
	CAMLE 3,TOP
	JRST CL2
	MOVE 12,Q12#	;GET BACK Y
	JRST VZZ ;POPJ 17,  	;ALL INBOUNDS
CL2:	JSA 16,CL	;100	CALL CL(XX,X2,YY,Y2,W1,W2,Z1,Z2,A,C)
	JUMP XX
	JUMP I
	JUMP YY
	JUMP J
	JUMP W1#
	JUMP W2#
	JUMP Z1#
	JUMP Z2#
	JUMP LFT
	JUMP RT
	MOVE YY		;	IF(Z1.LT.D.AND.Z2.LT.D)GO TO 4
	MOVE 1,J
	CAMLE TOP
	CAMG 1,TOP	;	IF(Z1.GT.B.AND.Z2.GT.B)GO TO 4
	SKIPA
	JRST XENOUT
	CAMGE BOT
	CAML 1,BOT
	JRST XCL
XENOUT:	SETOM N
	JRST VZZ ;POPJ 17,  	;OUT OF BOUNDS
XCL:	JSA 16,CL	;200	CALL CL(Z1,Z2,W1,W2,YY,Y2,XX,X2,D,B)
	JUMP Z1
	JUMP Z2
	JUMP W1
	JUMP W2
	JUMP YY		;300	TYPE 2,XX,YY,X2,Y2
	JUMP J	;	GO TO 4
	JUMP XX		;	END
	JUMP I
	JUMP BOT
	JUMP TOP
	JRST VZZ ;POPJ 17, 
	END BEG